import os,time,logging.config
from conf import setting


#1.登陆认证的装饰器
def login_auth(func):
    from core import src
    def wrapper(*args,**kwargs):
        if not src.user_info['username']:
            choice=input('尚未登陆，是否跳转登陆页面?<y,n>:').strip()
            if choice=='y':
                src.login()
            else:
                src.run()
        else:
            return func(*args,**kwargs)

    return wrapper




#2.日志模版：logging配置，提供给user,bank使用
def log_format(role,name):

    # 定义三种日志输出格式 开始
    standard_format = '[%(asctime)s][%(threadName)s:%(thread)d][task_id:%(name)s][%(filename)s:%(lineno)d]' \
                  '[%(levelname)s][%(message)s]' #其中name为getlogger指定的名字

    simple_format = '[%(levelname)s][%(asctime)s][%(filename)s:%(lineno)d]%(message)s'

    id_simple_format = '[%(levelname)s][%(asctime)s] %(message)s'

    # 定义日志的存放路径和输出格式，log文件的目录,这里一定要写活了，按照角色存入不同的路径！！！
    logfile_dir =os.path.join(setting.LOG_PATH,role)

    logfile_name =name+'-'+time.strftime('%Y-%m-%d',time.localtime())  # log文件名

    # 如果不存在定义的日志目录就创建一个
    if not os.path.isdir(logfile_dir):
        os.mkdir(logfile_dir)

    # log文件的全路径
    logfile_path = os.path.join(logfile_dir, logfile_name)

    # log配置字典
    LOGGING_DIC = {
        'version': 1,
        'disable_existing_loggers': False,
        'formatters': {
            'standard': {
                'format': standard_format
            },
            'simple': {
                'format': simple_format
            },
        },
        'filters': {},
        'handlers': {
            #打印到终端的日志
            'console': {
                'level': 'DEBUG',
                'class': 'logging.StreamHandler',  # 打印到屏幕
                'formatter': 'simple'
            },

            #打印到文件的日志,收集info及以上的日志
            'default': {
                'level': 'DEBUG',
                'class': 'logging.handlers.RotatingFileHandler',  # 保存到文件
                'formatter': 'standard',
                'filename': logfile_path,  # 日志文件
                'maxBytes': 1024*1024*5,  # 日志大小 5M
                'backupCount': 5,
                'encoding': 'utf-8',  # 日志文件的编码，再也不用担心中文log乱码了
            },
        },
        'loggers': {
            #logging.getLogger(__name__)拿到的logger配置
            '': {
                'handlers': ['default'],  # 这里把上面定义的两个handler都加上，即log数据既写入文件又打印到屏幕
                'level': 'DEBUG',
                'propagate': True,  # 向上（更高level的logger）传递
            },
        },
    }

    return LOGGING_DIC


def load_my_logging_cfg(role,name):
    logging.config.dictConfig(log_format(role,name))  # 导入上面定义的logging配置
    logger = logging.getLogger(role)  # 生成一个log实例
    return logger



#3.获取指定目录的列表
def  return_list(addr=setting.GOODS_PATH):
    all_list=os.listdir(addr)
    return all_list


